package com.oa.controller;

import com.oa.beans.SpLeaveApprovalCondition;
import com.oa.beans.SpLeaveApprovalStep;
import com.oa.beans.SpProcessInstance;
import com.oa.mapper.SpMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author 王鹏韬
 * @version v1.0
 * @dateTime 2025/3/13 15:30
 */
@RestController
@CrossOrigin
@RequestMapping("/Sp")
public class SpController {
    @Autowired
    private SpMapper spMapper;




    /**
     * 获取对应审批流程（请假、加班、出差）  连了用户表以及部门表 可按用户以及部门查询
     * 以及各种条件查询
     * 单独发给申请人，与发给审批人处理
     * @return
     */
    @GetMapping("/approval/getSpInstanceByMore")
    public List<SpProcessInstance> getSpInstanceByMore(@RequestBody SpProcessInstance spProcessInstance) {
        return spMapper.getSpInstanceByMore(spProcessInstance);
    }

    //保存
    @PostMapping("/approvalSave")
    private String spProcessInstanceSave(@RequestBody SpProcessInstance spProcessInstance){
        if(spProcessInstance.getId()!=null){
            //值不为空，进入修改
//            // 修改之前，判断一下是否重名
//            approvalService.getAllType();
//            {        json数据
//                "id": 1,
//                    "status": 1,
//                    "startTime": "2025-03-14T09:00:00",
//                    "endTime": "2025-03-14T18:00:00",
//                    "reason": "调整申请时间"
//            }
            spMapper.updSpInstance(spProcessInstance);
        }else{
            //值为空，进入添加
            spMapper.addSpInstance(spProcessInstance);
        }
        return "ok";
    }


    /**
     * 删除审批流程信息
     * @param id
     * @return
     */
    @DeleteMapping("/delSpProcessInstance/{id}")
    public String delSpProcessInstance(@PathVariable("id") int id) {
        spMapper.delSpProcessInstance(id);
        return "ok";
    }




    //审批步骤

    /**
     * 获取对应的流程的审批步骤 （请假与出差） 根据审批类型外键id
     * @return
     */
    @GetMapping("/approval/getSpLeaveSteps")
    public List<SpLeaveApprovalStep> getSpLeaveSteps(@RequestBody SpLeaveApprovalStep spLeaveApprovalStep) {
        return spMapper.getSpLeaveSteps(spLeaveApprovalStep);
    }

    //保存
    @PostMapping("/LeaveApprovalStepSave")
    private String spLeaveApprovalStepSave(@RequestBody SpLeaveApprovalStep spLeaveApprovalStep){
        if(spLeaveApprovalStep.getId()!=null){
            //值不为空，进入修改
            //更改对应流程的审批步骤  （请假与出差）
            spMapper.updSpLeaveSteps(spLeaveApprovalStep);
        }else{
            //值为空，进入添加
            //初次编辑审批步骤（请假与出差） 条件id为空就代表是串行审批  角色职位为空就代表在条件表了有了角色职位
            //角色职位不为空，代表是串行选择的审批角色职位
            //这个方法要在审批条件方法添加之前，
            spMapper.addSpLeaveSteps(spLeaveApprovalStep);
        }
        return "ok";
    }


    /**
     * 删除对应流程的审批步骤 （请假与出差）  同时记得删除审批步骤的条件审批表中的数据。
     * @param id
     * @return
     */
    @DeleteMapping("/delSpLeaveSteps/{id}")
    public String delSpLeaveSteps(@PathVariable("id") int id) {
        spMapper.delSpLeaveSteps(id);
        return "ok";
    }






    //审批条件

    //保存
    @PostMapping("/SpLeaveConitionsSave")
    private String spLeaveApprovalStepSave(@RequestBody SpLeaveApprovalCondition spLeaveApprovalCondition){
        if(spLeaveApprovalCondition.getId()!=null){
            //值不为空，进入修改
            //编辑更改审批步骤对应的审批条件时  (请假出差)
            spMapper.updSpLeaveConitions(spLeaveApprovalCondition);
        }else{
            //值为空，进入添加
            //初次编辑审批步骤对应的审批条件时  (请假出差)
            spMapper.addSpLeaveConitions(spLeaveApprovalCondition);
        }
        return "ok";
    }


    /**
     * 删除审批步骤的条件 (请假出差)
     * @param id
     * @return
     */
    @DeleteMapping("/delSpLeaveConitions/{id}")
    public String delSpLeaveConitions(@PathVariable("id") int id) {
        spMapper.delSpLeaveConitions(id);
        return "ok";
    }




}
